add_rules("mode.debug","mode.release")
set_languages("c++23")

add_requires("pybind11")

if is_mode("release")then
    set_optimize("aggressive") --这里使用了激进的优化，可能会导致浮点数计算不准确，考虑到本项目没有浮点计算，酌情考虑开启
    -- set_optimize("fastest") --上面和下面的二选一，--表示注释

    if is_plat("windows")then 
        -- 矢量化加速似乎没用
        -- add_cxxflags("/arch:AVX512") 
    elseif is_plat("linux") or is_plat("mingw") or is_plat("clang")then 
        -- 矢量化加速似乎没用
        -- add_cxxflags("-march=native")
    end 
end

if is_plat("windows")then 
    add_cxxflags("/openmp:llvm")
elseif is_plat("linux") or is_plat("mingw") or is_plat("clang")then 
    add_cxxflags("-fopenmp")
    add_ldflags("-fopenmp")
end 

add_includedirs("src/tools")
set_rundir("./")

target("dna_pybind")
    add_defines("DNA_IS_PYBIND")
    add_packages("pybind11")
    set_kind("shared")
    if is_plat("windows")then 
        set_filename("dna.pyd")
    else
        set_basename("dna")
    end 
    add_files("src/main.cpp")
    add_shflags("-fopenmp")
    after_build(
        function (target) 
            print(target:targetdir())
            os.cp("*.pyi",target:targetdir().."/dna/")
            os.cp("*.pyd",target:targetdir().."/dna/")
            os.cp("*.py",target:targetdir())
            if is_plat("windows") then
                os.cp("./dll/*.dll",target:targetdir())
            end
        end
    )

target("dna_bin")
    set_kind("binary")
    add_files("src/main.cpp")
